package com.yangyang.utils;

/**
 * 字符串工具类
 * 
 * @author lxh
 *
 */
public class StringUtil {

	// 字母正则
	private static final String LETTER = "[a-zA-Z]+";

	// 手机号正则
	private static final String PHONE = "^1[3|4|5|6|7|8|9]\\d{9}$";

	// 邮箱正则
	private static final String EMAIL = "^([a-z0-9A-Z]+[-|_|\\.]?)+[a-z0-9A-Z]@([a-z0-9A-Z]+(-[a-z0-9A-Z]+)?\\.)+[a-zA-Z]{2,}$";

	// 1-1 非空判断(包含空白字符)
	public static boolean hasLength(String param) {
		if (param != null && param.length() > 0) {
			return true;
		}
		return false;
	}

	// 1-2非空判断(不包含空白字符)
	public static boolean hasText(String param) {
		if (param != null && param.trim().length() > 0) {
			return true;
		}
		return false;
	}

	// 2.反转字符串
	public static String reverse(String param) {

		// reverse 源码解析
		/*
		 * char[] array = param.toCharArray(); int j = array.length; // 10,9,8,
		 * StringBuffer buffer = new StringBuffer();
		 * 
		 * for (int i = j; i >= 0; i--) { char c = array[i]; buffer.append(c); }
		 * buffer.toString();
		 */

		// 非空判断
		if (!hasText(param)) {
			return param;
		}
		// 字符反转处理
		return new StringBuffer(param).reverse().toString();
	}

	// 3.隐藏字符串：将敏感信息隐藏（18610651866 ---> 186****1866）
	public static String hiddenStr(String param, int startNum, int endNum) {
		// 非空判断
		if (!hasText(param)) {
			return "传入数据不正确，数据不能为空";
		}
		// 数据处理
		String head = param.substring(0, startNum); // 头
		String body = param.substring(startNum, endNum); // 体
		String tail = param.substring(endNum); // 未
		// 替换自定义字符 “*”
		String replace = "";
		for (int i = 0; i < body.length(); i++) {
			replace += "*";
		}
		return head + replace + tail;
	}

	public static String hiddenStr(String param, int startNum) {
		// 非空判断
		if (!hasText(param)) {
			return "传入数据不正确，数据不能为空";
		}
		// 数据处理
		String head = param.substring(0, startNum); // 头
		String body = param.substring(startNum); // 末
		// 替换自定义字符 “*”
		String replace = "";
		for (int i = 0; i < body.length(); i++) {
			replace += "*";
		}
		return head + replace;
	}

	// 4.判断传入字符串是否全为字母：字母正则表达式（“[a-zA-Z]+”）
	public static boolean isLetter(String param) {
		if (!hasText(param)) {
			return false;
		}
		// String 内部匹配方法
		return param.matches(LETTER);
	}

	// 5.判断传入字符串是否为手机号
	public static boolean isPhone(String param) {
		if (!hasText(param)) {
			return false;
		}
		// String 内部匹配方法
		return param.matches(PHONE);
	}

	// 6.判断传入字符串是否为邮箱
	public static boolean isEmail(String param) {
		if (!hasText(param)) {
			return false;
		}
		// String 内部匹配方法
		return param.matches(EMAIL);
	}

	// 把传入的字符串变为纯数数字
	public String stringToNumber(String str) {
		str = str.trim();
		String str2 = "";
		if (str != null && !"".equals(str)) {
			for (int i = 0; i < str.length(); i++) {
				if (str.charAt(i) >= 48 && str.charAt(i) <= 57) {
					str2 += str.charAt(i);

				}
				
			}
		}
		return str2;
	}

}
